package com.orhanobut.wasp.utils;
import android.text.TextUtils;
import com.orhanobut.wasp.Logger;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
import okio.Buffer;
/**
* An {@link com.squareup.okhttp.Interceptor} implementation which logs all info about
* outgoing request and related response including complete header set, request
* and response bodies and network time
*/
public class OkHttpLogInterceptor implements Interceptor {
private static final double MILLI_AS_NANO = 1e6d;
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Logger.d("---> REQUEST " + request.method() + " " + request.urlString());
logHeaders(request.headers());
//copy original request for logging request body
Request copy = request.newBuilder().build();
RequestBody requestBody = copy.body();
if (requestBody == null) {
Logger.d("Body - no body");
} else {
Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
Logger.d("Body - " + buffer.readString(requestBody.contentType().charset()));
}
Logger.d("---> END");
long t1 = System.nanoTime();
Response response = chain.proceed(request);
long t2 = System.nanoTime();
Logger.d("<--- RESPONSE " + response.code() + " " + response.request().urlString());
logHeaders(response.headers());
String responseBody = response.body().string();
Logger.d(TextUtils.isEmpty(responseBody) ? "Body - no body" : "Body - " + responseBody);
Logger.d("<--- END " + "(Size: " + response.body().contentLength() + " bytes - "
+ "Network time: " + (t2 - t1) / MILLI_AS_NANO + " ms)");
return response;
}
private static void logHeaders(Headers headers) {
for (String headerName : headers.names()) {
for (String headerValue : headers.values(headerName)) {
Logger.d("Header - [" + headerName + ": " + headerValue + "]");
}
}
}
}